﻿using System;
using System.Globalization;
using System.Windows.Data;
using SHomeWorkshop.LunarPresentation.Interfaces;

namespace SHomeWorkshop.LunarPresentation.Converts
{
    public class MaxWidthConverter : IMultiValueConverter
    {

        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values.Length == 6)
            {
                AutoWrapType selfAutoWrap = (AutoWrapType)values[4];
                bool docAutoWrap = (bool)values[3];
                double fontSize = (double)values[0];
                double wndWidth = (double)values[1];
                int indent = (int)values[2];

                if ((selfAutoWrap == AutoWrapType.FromDoc && docAutoWrap == true) ||
                    selfAutoWrap == AutoWrapType.Wrap)
                {
                    double result = wndWidth - (indent + 1) * 2 * fontSize;
                    //文本块如果缩进是五级的话的，最大宽度为主窗口的实际宽度减去１２字宽。
                    //字符的宽度由正文的字号决定，正文字号即是编辑器的默认基准字号。
                    //这是考虑到标题有４级，再加１级正文，每级缩进２字宽，共计１０字宽。
                    //又主窗口还有边距，这样１２字就差不多了。

                    if (result < 200)
                    {
                        return 200;
                    }
                    else
                    {
                        double editorMaxTextWidth = (double)values[5];
                        if (result > editorMaxTextWidth)
                        {
                            return editorMaxTextWidth;
                        }
                        else
                        {
                            return result;
                        }
                    }
                }
                else
                {
                    return Double.PositiveInfinity;//如果不自动折行，则不限制宽度。PositiveInfinity，正无穷。
                }
            }
            else return Double.PositiveInfinity;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            return null;
        }
    }
}
